package net.hserver.admin.system.controller;

import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hserver.core.ioc.annotation.Autowired;
import cn.hserver.plugin.web.annotation.Controller;
import cn.hserver.plugin.web.annotation.GET;
import cn.hserver.plugin.web.annotation.POST;
import cn.hserver.plugin.web.annotation.PUT;
import com.mybatisflex.core.paginate.Page;
import lombok.extern.slf4j.Slf4j;
import net.hserver.admin.system.common.MyResult;
import net.hserver.admin.system.config.Log;
import net.hserver.admin.system.entity.Role;
import net.hserver.admin.system.service.RoleService;

import java.util.List;
import java.util.Optional;
import java.util.Set;

/**
 * 角色信息接口
 *
*
 * @since 2022-06-12
 */
@Slf4j
@Controller("/role")
@Log
public class RoleController {

    @Autowired
    private RoleService service;

    /**
     * 分页查询列表
     *
     * @param index  当前页|1
     * @param size   页大小|10
     * @param entity 查询实体
     * @return 所有数据
     */
    @SaCheckPermission("role:query")
    @POST("/page/{index}/{size}")
    public MyResult selectAll(Role entity, Long index, Long size) {
        Page<Role> page = new Page<>(index, size);
        return MyResult.of(service.page(page, Optional.ofNullable(entity).orElse(new Role())));
    }

    /**
     * 不分页查询列表
     *
     * @param entity 实体对象
     * @return 查询结果
     */
    @SaCheckPermission("role:query")
    @POST("/list")
    public MyResult list( Role entity) {
        return MyResult.of(service.list(Optional.ofNullable(entity).orElse(new Role())));
    }

    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    @SaCheckPermission("role:query")
    @GET("/role/{id}")
    public MyResult getById( Long id) {
        return MyResult.of(service.getById(id));
    }

    /**
     * 新增单条数据
     *
     * @param entity 实体对象
     * @return 新增结果
     */
    @SaCheckPermission("role:add")
    @POST("")
    public MyResult save( Role entity) {
        service.save(entity);
        return MyResult.success();
    }

    /**
     * 修改单条数据
     *
     * @param entity 实体对象
     * @return 修改结果
     */
    @SaCheckPermission("role:edit")
    @PUT("")
    public MyResult update( Role entity) {
        service.update(entity);
        return MyResult.success();
    }

    /**
     * 批量删除数据
     *
     * @param ids 主键集合
     * @return 操作结果
     */
    @SaCheckPermission("role:delete")
    @POST("/delete")
    public MyResult deleteByIds(List<Long> ids) {
        service.deleteByIds(ids);
        return MyResult.success();
    }

    /**
     * 权限勾选项
     *
     * @param roleId 角色ID
     * @return 操作结果
     */
    @SaCheckPermission("role:edit")
    @GET("/checked/{roleId}")
    public MyResult selectMenuIdsByRoleId( Long roleId) {
        return MyResult.of(service.selectMenuIdsByRoleId(roleId));
    }

}
